/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package negocio;

import datos.TipoObra;
import java.util.List;
import javax.ejb.Local;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */
@Local
public interface GestorTipoObraLocal {

    /***
     * Retorna todas laas instancias de TipoObra, almacenadas en la BD.
     * @return lista con todas las instancias de tipo obra almacenadas en la base
     * de datos y null en caso contrario
     * interfaz local
     */
    public List consultarTipoObra();

    /***
     * Retorna todos los nombres de las instancias de TipoObra.
     * @return lista con todos los nombres de las instancias de tipoObra
     * y null en caso contrario
     * interfaz local
     */
    public List tiposObra();

    /***
     * Agrega una nueva instancia de TipoObra a la BD.
     * @param tipoObra
     * @return true si la instancia tipoObra ha sido persistida con exito
     * y false en caso contrario
     * interfaz local
     */
    public boolean agregarTipoObra(TipoObra tipoObra);

    /***
     * Actualiza una instancia de TipoObra, previamente encontrada por su ID en la BD.
     * @param tipoObra
     * @return true si la instancia tipoObra es encontrada por su ID, modificados sus atributos
     * y persistida con exito. False en caso contrario
     * interfaz local
     */
    public boolean modificarTipoObra(TipoObra tipoObra);

    /***
     * Remueve una instancia de TipoObra, previamente encontrada por ID en la BD.
     * @param tipoObra
     * @return true si la instancia tipoObra es encontrada por su ID, y removida
     * de la base de datos con exito. False en caso contrario
     * interfaz local
     */
    public boolean eliminarTipoObra(TipoObra tipoObra);

    /***
     * Busca en la BD alguna instancia de TipoObra por nombre.
     * @param tipoObra
     * @return true si existe alguna instancia de tipoObra con nombre = "nombre"
     * y false en caso contrario
     * interfaz local
     */
    public boolean existeNombreTipoObra(TipoObra tipoObra);

    /***
     * Valida que el nombre de la nueva instancia de TipoObra, no coincida con otra en la BD.
     * @param tipoObra
     * @return true si existe alguna instancia TipoObra con nombre = "nombre" y ID <> "id"
     * y false en caso contrario
     * interfaz local
     */
    public boolean existeNombreTipoObraModificar(TipoObra tipoObra);

     /***
     * Retorna aquella instancia de TipoObra cuyo nombre coincida con el parametro nombre.
     * @param nombre
     * @return instancia tipo obra con nombre igual a "nombre" y null en caso contrario
     * interfaz local
     */
    public TipoObra encontrarTipoObra(java.lang.String nombre);

    /***
     * Valida si alguna instancia de Obra tiene asignado una instancia TipoObra con ID igual
     * al valor del parametro idTipoObra.
     * @param idTipoObra
     * @return true si existe alguna instancia de Obra con idTipoObra = "idTipoObra", es decir,
     * relacionada con algún TipoObra y false en caso contrario
     * interfaz local
     */
    public boolean tipoObraFueAsignadoObras(int idTipoObra);

    /***
     * Retorna todas las instancias de SubtipoObra por Tipo.
     * @param idTipoObra
     * @return lista con todas las instancias de SubtipoObra con idTipoObra = "idTipoObra"
     * ordenada por nombre y null en caso contrario
     * interfaz local
     */
    public List subTiposObra(int idTipoObra);

    /***
     * Valida si ya existe alguna instancia de tipo SubtipoObra, con nombre y idTipo igual
     * al valor de los parametros nombre y idTipo respectivamente. Para no almacenar dos instancias con valores iguales.
     * @param idTipo
     * @param nombre
     * @return true si existe alguna instancia de SubtipoObra con nombre = "nombre"
     * y idTipoObra = "idTipo". False en caso contrario
     * interfaz local
     */
    public boolean existeNombreSubtipoObra(int idTipo, java.lang.String nombre);

    /***
     * Agrega una nueva instancia de tipo SubtipoObra, en la BD.
     * @param nombreSubtipo
     * @param descripcionSubtipo
     * @param idTipo
     * @return true si existe alguna instancia TipoObra con ID = idTipo, modificados y actualizados todos
     * sus atributos y relaciones con clases. Flase en caso contrario
     * interfaz local
     */
    public boolean agregarSubtipoObra(java.lang.String nombreSubtipo, java.lang.String descripcionSubtipo, int idTipo);

    /***
     * Valida si ya existe alguna instancia de tipo SubtipoObra, con nombre y idTipo igual
     * al valor de los parametros nombre y idTipo respectivamente. Para no actualizar dos instancias con valores iguales.
     * @param idTipo
     * @param nombre
     * @param idSubtipo
     * @return true si existe alguna instancia de SubtipoObra con nombre = "nombre", idTipoObra = "idTipo"
     * y id <> "idSubtipo". False en caso contrario.
     * interfaz local
     */
    public boolean existeNombreSubtipoObraModificar(int idTipo, java.lang.String nombre, int idSubtipo);


     /***
     * Actualiza una instacia de tipo SubtipoObra.
     * @param idSubtipo
     * @param nombreSubtipo
     * @param descripcionSubtipo
     * @return true si existe alguna instancia SubtipoObra con ID = idSubtipo, modificados y actualizados todos
     * sus atributos y relaciones con clases. False en caso contrario
     * interfaz local
     */
    public boolean modificarSubtipoObra(int idSubtipo, java.lang.String nombreSubtipo, java.lang.String descripcionSubtipo);

    /***
     * Remueve una instancia de SubtipoObra de la BD.
     * @param idSubtipo
     * @return true si existe alguna instancia SubtipoObra con ID = idSubtipo, y removido todos
     * sus atributos y relaciones con clases. False en caso contrario
     * interfaz local
     */
    public boolean eliminarSubtipoObra(int idSubtipo);

    /***
     * Retorna todas las instancias de SubtipoObra con nombre igual al valor de
     * parametro nombreSubtipo.
     * @param nombreSubtipo
     * @return lista de todas la instancias de SubtipoObra con nombre como nombreSubtipo
     * ordena por nombre y null en caso contrario
     * interfaz local
     */
    public List encontrarSubtiposPorNombre(java.lang.String nombreSubtipo);
    
}
